# 1. 选择一个官方的 Node.js 运行时作为我们的基础镜像
# 我们选择了 16 这个长期支持版本
FROM node:16
# 或者直接使用国内镜像源地址
# FROM docker.m.daocloud.io/node:16
# FROM registry.cn-hangzhou.aliyuncs.com/nodejs/node:16

# 2. 在镜像中创建一个目录来存放我们的应用代码
# 并将其设置为工作目录
WORKDIR /usr/src/app

# 3. 拷贝 package.json 和 package-lock.json (如果存在)
# 我们将这两个文件分开拷贝，是为了更好地利用 Docker 的缓存机制
COPY package*.json ./

# 4. 安装我们的应用依赖
# 只有当 package.json 文件发生变化时，这一层缓存才会失效
RUN npm install

# 5. 将我们项目目录下的所有文件，都拷贝到工作目录中
# 使用 .dockerignore 来排除不需要的文件
COPY . .

# 6. 告诉 Docker，我们的应用在容器内会监听 8080 端口
EXPOSE 8080

# 7. 定义容器启动时要执行的命令
# 根据 package.json 中的配置，正确的入口文件是 src/app.js
CMD [ "node", "src/app.js" ]